=========================================================================
ISTRUZIONI per l'assegnamento di recuper anno 2018/19
========================================================================
L'assegnamento prevede la realizzazione di alcune funzioni che permettono di implementare la simulazione LIFE e di realizzare un comando life utilizzabie da shell.
Una descrizione approfondita si trova nel file life.pdf.

Cosa deve essere fatto:
(1) le funzioni il cui prototipo si trova nel file life.h devono essere implementate in un file chiamato life.c
(2) il main e le altre funzioni necessarie per implementare il comando "life" devono essere realizzate in un file chiamato "main.c"
(3) i file life.c e main.c devono essere consegnati al docente nel formato "tar" creato automaticamente come descritto piu' sotto
(4) il "tar" deve essere allegato ad una normale mail da inviare al proprio docente (susanna.pelagatti@unipi.it per corso A, conte@di.unipi.it per corso B) con oggetto"info19: consegna assegnamento di recupero"

------------------------------------------------
Estrarre il materiale dal KIT dell'assignmento
------------------------------------------------
Creare una directory temporanea, copiare kit_ar.tar  
nella directory e spostarsi nella directory appena creata. Es.

$$ mkdir AssegnamentoR
$$ mv kit_ar.tar AssegnamentoR
$$ cd AssegnamentoR

S-tarare i file del kit con

$$ tar xvf kit_ar.tar

questo comando crea nella directory corrente una directory "LIFE"
con i seguenti file

$$ ls LIFE
life.pdf		: file contenente la descrizione del gioco da realizzare

life.h 			: header file che contiene i prototipi delle funzioni
			  da realizzare

00test.c
01test.c
02test.c
03test.c
			: file che contengono i main() di test forniti dai
			  docenti (NON MODIFICARE)
life_docenti.c		: file con una funzione 
			  utilizzata nei test (NON MODIFICARE)

DATA/			  : cartella con vari file di dati utilizzati nei test
			  (NON NODIFICARE)

Makefile		: un file che permette l'automatizzazione della
                          compilazione e dei test forniti dai
			  docenti (NON MODIFICARE)
			
README			: questo file


gruppo-check.pl		: uno script Perl che controlla il formato del file
			  gruppo.txt prima di effettuare la consegna
			  (NON MODIFICARE)

gruppo.txt		: un file di esempio di specifica del gruppo
			  (massimo 2 studenti per gruppo)
			  (deve essere aggiornato con i dati di chi consegna,
			  secondo il formato esemplificato)

========================================================================
ISTRUZIONI per la realizzazione dell'assegnamento
========================================================================

L'assegnamento prevede la realizzazione di alcune funzioni
(le specifiche dettagliate si trovano nei commenti dei file life.h) e di un comando "life" utilizzabile da shell (descritto nella sezione 2.2. di life.pdf).

Lo studente deve realizzare le funzioni secondo le specifiche, testandone 
il funzionamento con delle funzioni main() sviluppate in modo opportuno.

Quando si e' ragionevolmente sicuri della correttezza delle funzioni in base
alle specifiche ed ai test che abbiamo effettuato si puo' passare ai test
automatici contenuti nel Makefile e sviluppati dai docenti.
E' importante non eseguire i test del Makefile con codice non 
precedentemente testato perche' in questo caso i risultati sarebebro di 
difficile interpretazione e fuorvianti.

I test del Makefile sono i seguenti:

1) il primo, attivabile dando da shell il comando
"make test1"
testa le funzioni per allocare,deallocare e inizializzare il modello life.
Il test non fa altro che eseguire il main() contenuto nel file "01test.c" 
che lo studente e' invitato a leggere e comprendere.

2) il secondo test, attivabile dando da shell il comando
"make test2"
testa la scrittura e lettura da file delle configurazioni life secondo il formato specificato pe rle funzioni leggi(scrivi in life.h
Il test non fa altro che eseguire il main() contenuto nel file "02test.c" 
che lo studente e' invitato a leggere e comprendere.

3) il terzo test ("make test3") testa la funzione
step() che aggiorna la matrice a con una passo di simulazione che considera tutti gli elementi della matrice.
Il test non fa altro che eseguire il main() contenuto nel file "03test.c"
che lo studente e' invitato a leggere e comprendere.

4) il quarto test (make test4) compila automaticamente il main() che lo studente ha realizzato nel file main.c per creare l'eseguibile corrispondente al comando "life" e attiva il comando "life" controllandone il funzionamento.
Questo test esegue solo comandi di shell e quindi non corrisponde a nessun main.

5) il quinto test (make test5) compila automaticamente il main() che lo studente ha realizzato nel file main.c per creare l'eseguibile corrispondente al comando "life" e attiva il comando "life" controllando il funzionamento dell'opzione -s.
Questo test esegue solo comandi di shell e quindi non corrisponde a nessun main.

Bonus: il test0 (make test0) chiede all'utente di inserire il nome di un file da tastiera, ed esegue 200 passi di simulazione stampandone l'animazione. La cartella DATA contiene alcuni input che e' possibile provare. E' anche possibile modificare le macro STEP e SLEEP_TIME nel file 00test.c per cambiare il numero di passi o la velocita' dell'animazione.

------------------
Come procedere --> i passi :
-----------------

1) leggere attentamente life.pdf

2) implementare e testare le funzioni in life.h nel file life.c

3) testare il software con i test forniti dai
  docenti. 

       $ make test1
       $ make test2
       $ make test3       
       

  NOTA: (1) il file life.c si deve trovare nella cartella LIFE/
 
  (2) E' importante che il test fornito dai docenti venga effettuato solo su
  un programma gia' funzionante e testato altrimenti i risultati
  possono essere di difficile interpretazione, fuorvianti o inutili.

4) implementare il main() in main.c e testarlo. 

5) testare il comando "./life" con i test forniti dai
  docenti. 

       $ make test4
       $ make test5
       

  NOTA: (1) il file life.c e main.c si deveno trovare nella cartella LIFE/
 
  (2) E' importante che il test fornito dai docenti venga effettuato solo su
  un programma gia' funzionante e testato altrimenti i risultati
  possono essere di difficile interpretazione, fuorvianti o inutili.

6) preparare la documentazione: ovvero commentare adeguatamente i *.c e scrivere la relazione che spiega la struttura del codice che realizza il comando "life" (la relazione deve includere il "man" per "life").
   ed inserire un’ intestazione contenente i nomi
   degli sviluppatori ed  una dichiarazione di originalita' 

   /** \file pippo.c
       \author Nino Bixio & Giuseppe Garibaldi
     Si dichiara che il contenuto di questo file e' in ogni sua parte opera
     originale degli  autori.  */

7) aggiornare il file "gruppo.txt" con i nomi e dati degli sviluppatori

8) consegnare il file eseguendo

      bash:~$ make consegna

   e seguendo le istruzioni.

   Il target consegna crea un file tar che deve essere inviato
   all'indirizzo del docente 

   "info19: consegna assegnamento di recupero"

   Se il make non funziona nell'ambiente in cui state sviluppando, create
   un tar file con all'interno il file life.c, main.c
   e gruppo.txt ed inviatelo al docente come sopra.
   Tutte le consegne verranno confermate con un messaggio entro 2/3
   giorni all'indirizzo da cui e' stata effettuata la consegna. In
   caso questo non si verifichi contattare il docente.
   

---------------------------------------
 NOTE IMPORTANTI: LEGGERE ATTENTAMENTE
---------------------------------------

1) tutti gli elaborati verranno confrontati fra di loro con tool automatici
   per stabilire eventuali situazioni di PLAGIO. Se gli elaborato sono 
   ragionevolmente simili verranno scartati.

2) Chi in sede di orale risulta palesemente non essere l'autore del software
   consegnato in uno degli assegnamenti dovra' ripetere l'esame

3) Tutti i comportamenti scorretti ai punti 1 e 2 verranno segnalati
   ufficialmente al presidente del corso di laurea

----------------------------
 VALUTAZIONE DELL'ASSEGNAMENTO:
----------------------------

Il completamento dell'assegnamento è obbligatorio per poter sostenere l'esame.

La qualita' del codice consegnato e delle discussioni fornite 
sara' valutata complessivamente da 0 a 30 e fara' media
con il voto dell'esame orale.
